/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package matematicadiscretaxml;

/**
 *
 * @author diego
 */
public class And {

    ObjetoQuery[][] matriz_1;
    ObjetoQuery[][] matriz_2;

    public And() {}

    public And(ObjetoQuery[][] _matriz_1, ObjetoQuery[][] _matriz_2)
    {
        matriz_1 = _matriz_1;
        matriz_2 = _matriz_2;
    }

    public ObjetoQuery[][] intersectarMatrices()
    {
        ObjetoQuery[][] matriz_and = new ObjetoQuery[0][0];
        ObjetoQuery[] vector_aux = new ObjetoQuery[matriz_1[0].length];
        int numero_filas_inter = 0;
        int contador = 0;

        imprimirMatriz(matriz_1);
        imprimirMatriz(matriz_2);


        for(int i = 0; i<matriz_1.length; i++)
        {
            for(int j = 0; j<matriz_1[0].length; j++)
            {
                vector_aux[j] = matriz_1[i][j];
            }
            if(buscarInterseccionMatriz(vector_aux))
            {
                numero_filas_inter++;
            }
            vector_aux = new ObjetoQuery[matriz_1[0].length];
        }

        matriz_and = new ObjetoQuery[numero_filas_inter][matriz_1[0].length];
        
        for(int i = 0; i<matriz_1.length; i++)
        {
            for(int j = 0; j<matriz_1[0].length; j++)
            {
                vector_aux[j] = matriz_1[i][j];
            }
            if(buscarInterseccionMatriz(vector_aux))
            {
                for(int k = 0; k<matriz_1[0].length; k++)
                {
                    matriz_and[contador][k] = vector_aux[k];
                }
                contador++;
            }
            vector_aux = new ObjetoQuery[matriz_1[0].length];
        }
        imprimirMatriz(matriz_and);

        return matriz_and;
    }
    
    public boolean buscarInterseccionMatriz(ObjetoQuery[] vector)
    {
        ObjetoQuery[] vector_aux = new ObjetoQuery[matriz_1[0].length];
        boolean bandera_encontrado =  false;
        int contador_interseccion = 0;
        
        for(int i = 0; i<matriz_2.length; i++)
        {
            for(int j = 0; j<matriz_2[0].length; j++)
            {
                vector_aux[j] = matriz_2[i][j];
            }
            
            for(int k = 0; k<vector_aux.length; k++)
            {
                if(vector_aux[k].getObjeto().toString().equals(vector[k].getObjeto().toString()) )
                {
                    contador_interseccion++;
                }
            }
            if(contador_interseccion == matriz_2[0].length)
            {
                bandera_encontrado = true;
            }
            contador_interseccion = 0;
        }
        return bandera_encontrado;
    }

    public void imprimirMatriz(ObjetoQuery[][] matriz)
    {
        System.out.println("*********** INTERSECCION **************");
        if(matriz.length != 0)
        {
           for(int i = 0; i<matriz.length; i++)
            {
                for(int j = 0; j<matriz[0].length; j++)
                {
                    System.out.print(matriz[i][j].getObjeto()+" | ");
                }
                System.out.println("");
            }
        }
        

    }

}
